July 17, 2023
다음 조건 중 하나라도 해당하면 N개의 문자로 구성된 문자열 S가 올바르게 중첩된 것으로 간주됩니다:
예를 들어 문자열 “{ [ ( ( ) ( ) ] }“는 올바르게 중첩되지만 “( [ ) ( ) ]“는 중첩되지 않습니다.
함수를 작성합니다:
function solution(S);이 함수는 N개의 문자로 구성된 문자열 S가 주어졌을 때 S가 올바르게 중첩된 경우 1을 반환하고 그렇지 않은 경우 0을 반환합니다.
예를 들어 S = “{ [ ( ( ) ( ) ] }“이면 위에서 설명한 대로 함수는 1을 반환해야 하고, S = “( [ ) ( ) ]“이면 함수는 0을 반환해야 합니다.
다음 가정에 대한 효율적인 알고리즘을 작성합니다:
스택 자료구조를 이용하여 열린 괄호이면 push 하고 닫힌괄호일때 마지막 아이템 괄호가 같은 종류에 열린괄호 이면 pop 한다.
function solution(S) {
const stack = [];
const bracketInfo = {
"(": ")",
"[": "]",
"{": "}",
}
for (let i = 0; i < S.length; i++) {
const char = S[i];
if (bracketInfo.hasOwnProperty(char)) {
stack.push(char);
continue;
}
const lastChar = stack[stack.length - 1];
if (bracketInfo[lastChar] === char) {
stack.pop();
} else {
return 0;
}
}
const isEmpty = stack.length === 0;
return isEmpty ? 1 : 0;
}